package com.steven.treatment_case.activity;

import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.SurfaceView;

import com.alibaba.fastjson.JSONObject;
import com.steven.treatment_case.R;
import com.steven.treatment_case.base.BaseActivity;
import com.steven.treatment_case.entity.ResultEntity;
import com.steven.treatment_case.net.MyCallback;
import com.steven.treatment_case.net.TaskNoHead;
import com.videogo.errorlayer.ErrorInfo;
import com.videogo.openapi.EZConstants;
import com.videogo.openapi.EZOpenSDK;
import com.videogo.openapi.EZPlayer;


import retrofit2.Response;

public class CameraActivity extends BaseActivity {
    private Handler mHandler;
    private SurfaceView mSurface;
    private EZPlayer ezp;
    private static String TAG = CameraActivity.class.getSimpleName();


    @Override
    public int intiLayout() {
        return R.layout.activity_camera;
    }

    @Override
    public void initView() {
        mHandler = new MyHandler();
        mSurface = findViewById(R.id.surFace);
        getAccessToken();//获取摄像头token
    }

    private void getAccessToken() {
        TaskNoHead.getInstance().getAccessToken().enqueue(new MyCallback<ResultEntity>() {
            @Override
            protected void onSuccess(Response response) {
                JSONObject jsonObject = (JSONObject) JSONObject.toJSON(response.body());
                assert jsonObject != null;
                if (jsonObject.getInteger("code") == 0) {
                    String accessToken = jsonObject.getJSONObject("data").getString("accessToken");//表示获取成功
                    EZOpenSDK.getInstance().setAccessToken(accessToken);//设置accessToken
                    initCamera();
                }
            }

            @Override
            protected void onFailure(Throwable t) {

            }
        });
    }

    //静态内部类handler，防止内存泄漏
    private static class MyHandler extends Handler {
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case EZConstants.EZRealPlayConstants.MSG_REALPLAY_PLAY_SUCCESS:
                    //播放成功
                    Log.e(TAG, "handleMessage: 播放完成!");
                    break;
                case EZConstants.EZRealPlayConstants.MSG_REALPLAY_PLAY_FAIL:
                    //播放失败,得到失败信息
                    ErrorInfo errorinfo = (ErrorInfo) msg.obj;
                    //得到播放失败错误码
                    int code = errorinfo.errorCode;
                    //得到播放失败模块错误码
                    String codeStr = errorinfo.moduleCode;
                    //得到播放失败描述
                    String errorDescription = errorinfo.description;
                    //得到播放失败解决方方案
                    String errorScheme = errorinfo.sulution;
                    break;
                case EZConstants.MSG_VIDEO_SIZE_CHANGED:
                    //解析出视频画面分辨率回调
                    try {
                        String temp = (String) msg.obj;
                        String[] strings = temp.split(":");
                        int mVideoWidth = Integer.parseInt(strings[0]);
                        int mVideoHeight = Integer.parseInt(strings[1]);
                        //解析出视频分辨率
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    break;
                default:
                    break;
            }
        }
    }

    /**
     * 调起摄像头  开启直播
     */
    private void initCamera() {

        ezp = EZOpenSDK.getInstance().createPlayer("D81192559", 1);
        //设置Handler, 该handler将被用于从播放器向handler传递消息
        ezp.setHandler(mHandler);

        //设置播放器的显示Surface
        ezp.setSurfaceHold(mSurface.getHolder());

        /**
         * 设备加密的需要传入密码
         * 传入视频加密密码，用于加密视频的解码，该接口可以在收到ERROR_INNER_VERIFYCODE_NEED或ERROR_INNER_VERIFYCODE_ERROR错误回调时调用
         * @param verifyCode 视频加密密码，默认为设备的6位验证码
         */
        ezp.setPlayVerifyCode("LWLHTI");

        //开启直播
        ezp.startRealPlay();
        speakToCamera();
    }

    //对讲说话
    private void speakToCamera() {
        //设置Handler, 该handler将被用于从播放器向handler传递消息
        ezp.setHandler(mHandler);
        /**
         * 设备加密的需要传入密码
         * 传入视频加密密码，用于加密视频的解码，该接口可以在收到ERROR_INNER_VERIFYCODE_NEED或ERROR_INNER_VERIFYCODE_ERROR错误回调时调用
         * @param verifyCode 视频加密密码，默认为设备的6验证码
         */
        ezp.setPlayVerifyCode("LWLHTI");

        //开启对讲
        ezp.startVoiceTalk();

        //关闭对讲
//        talk.stopVoiceTalk();

        //注意对于半双工对讲：需要调用上面接口开启对讲
        //开启对讲后能听到设备端声音，但是设备端听不到自己的声音，需要以下操作setVoiceTalkStatus

        //设备端听，手机端说
        ezp.setVoiceTalkStatus(true);

//        //手机端听，设备端说
//        talk.setVoiceTalkStatus(false);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ezp.stopRealPlay();
        ezp.stopVoiceTalk();
        ezp.release();
        ezp = null;
    }
}
